package com.baizhi.method;

/**
 * join方法可以协调多个线程之间同步运行
 * 同步运行：多个线程在执行代码时出现了先后循序的运行方式
 * 异步运行：多个线程执行代码时各干各的，多线程本身就是异步运行的
 */
public class JoinDemo {
    private static boolean isFInish = false; //声明静态变量，用于标识图片是否下载完毕
    public static void main(String[] args) {
        Thread download = new Thread(){
            @Override
            public void run() {
                System.out.println("down:开始下载图片......");
                for (int i = 1; i <= 100; i++) {
                    System.out.println("down:"+i+"%");
                    try {
                        Thread.sleep(50);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                System.out.println("down:图片下载完毕了！");

                isFInish = true; //表示图片下载完毕
            }
        };


        Thread show = new Thread(){
            @Override
            public void run() {
                try {
                    System.out.println("show:开始显示文字...");
                    Thread.sleep(3000);
                    System.out.println("show:文字显示完毕！");

                    //让show线程等待download执行完毕之后再执行
                    download.join();

                    System.out.println("show:开始显示图片");
                    if(!isFInish){
                        throw new RuntimeException("图片加载失败");
                    }
                    System.out.println("show:图片显示完毕！");

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };


        download.start();
        show.start();
    }
}
